Field Programmable Gate Arrays (FPGAs) are general-purpose logic devices that can be configured to provide any desired logic function within the range of capabilities of the FPGA. Each FPGA comprises, internally, one or more Programmable Logic Blocks (PLBs) that can be interconnected at their outputs and inputs through a programmable interconnection matrix. Each PLB includes logic-circuit elements that can be programmed to interconnect in one of several possible ways. The range of capabilities provided by each PLB is defined by the set of logic-circuit elements available. A PLB is incapable of providing functionality that requires any additional logic circuit elements.
In several applications, logic circuit elements in some PLBs remain unutilized or underutilized while other PLBs are limited by the availability of insufficient quantities of logic-circuit elements. This situation results in inefficient utilization of the FPGAs resources. In these conditions, it would prove beneficial if the unutilized logic circuit elements in one PLB could be utilized by other PLBs. Current FPGA architectures do not provide any means to permit the sharing of logic-circuit elements between PLBs. This limitation is particularly applicable to sequential-logic elements.
U.S. Pat. No. 5,883,525 describes an FPGA architecture that provides an arrangement for reducing the chip area of an FPGA by minimizing the programmable interconnection points in the programmable routing matrix. However, this invention does not provide any mechanism for enabling access to internal logic elements of a PLB.